#pragma once
#include <QObject>
#include <unordered_map>
#include <string>
#include <memory>
#include <nlohmann/json.hpp>
#include "TrTypes.h"

namespace Common {



class ContractManager : public QObject {
    Q_OBJECT
public:
    static ContractManager* instance();
    
    // 初始化，加载合约配置文件
    bool init(const QString& configFile);
    
    // 获取合约信息
    Contract getContract(const std::string& code) const;
    
    // 获取所有合约
    const std::unordered_map<std::string, Contract>& getAllContracts() const {
        return m_contracts;
    }
    
    // 检查合约是否存在
    bool hasContract(const std::string& code) const;
    
    // 获取某个交易所的所有合约
    std::vector<Contract> getContractsByExchange(const std::string& exchg) const;
    
    // 获取某个品种的所有合约
    std::vector<Contract> getContractsByProduct(const std::string& product) const;
    
private:
    ContractManager(QObject* parent = nullptr);
    ~ContractManager() = default;
    
    // 禁用拷贝和赋值
    ContractManager(const ContractManager&) = delete;
    ContractManager& operator=(const ContractManager&) = delete;
    
    // 从JSON对象解析合约信息
    Contract parseContractInfo(const nlohmann::json& json);
    
    // 存储所有合约信息的map
    std::unordered_map<std::string, Contract> m_contracts;
    
    bool m_initialized{false};
};

#define CONTRACT_MGR Common::ContractManager::instance()

} // namespace Common 